<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <!--IE Compatibility modes-->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!--Mobile first-->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>403</title>

    <meta name="description" content="Free Admin Template Based On Twitter Bootstrap 3.x">
    <meta name="author" content="">

    <meta name="msapplication-TileColor" content="#5bc0de"/>
    <meta name="msapplication-TileImage" content="assets/img/metis-tile.png"/>

    <!-- Bootstrap -->
    <link href="//cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

    <!-- Font Awesome -->
<#--<link rel="stylesheet" href="assets/lib/font-awesome/css/font-awesome.min.css">-->
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="/assets/lib/bootstrap-table/bootstrap-table.min.css">
    <link rel="stylesheet" href="/assets/lib/bootstrap-switch/css/bootstrap3/bootstrap-switch.min.css">
    <!-- Metis core stylesheet -->
    <link rel="stylesheet" href="/assets/css/main.css">


    <!-- animate.css stylesheet -->
    <link rel="stylesheet" href="/assets/lib/animate.css/animate.css"/>
    <link rel="stylesheet" href="/assets/lib/select2/css/select2.min.css"/>
    <link rel="stylesheet" href="/assets/lib/ztree/css/metroStyle/metroStyle.css"/>
    <link rel="stylesheet" href="/assets/lib/bootstrap-validator/css/bootstrapValidator.min.css"/>
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="//oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>
<div class="bg-dark dk" id="wrap" style="height:50px;">
    <header class="head">
        <div class="">
            <ol class="breadcrumb" style="background-color: #3a3a3a">
                <li><a href="#"> <i class="fa fa-home"> 系统设置</i></a></li>
                <li class="active">角色管理</li>
            </ol>
        </div>
        <!-- /.main-bar -->
    </header>
</div>
<div class="container" style="width:100%;">
    <div class="row">
        <div class="col-lg-12">
            <div class="box dark">
                <header>
                    <div class="icons"><i class="fa fa-th-large"></i></div>
                    <h5>角色管理</h5>
                    <!-- .toolbar -->
                    <div class="toolbar">
                        <nav style="padding: 8px;">
                        </nav>
                    </div>            <!-- /.toolbar -->
                </header>
                <div class="col-lg-12">
                    <div class="box">
                        <div id="collapse4" class="body">
                            <div id="toolbar" style="margin-bottom: 5px;">
                                <div class="btn-group">
                                    <button type="button" data-toggle="modal" data-target="#add_modal"
                                            class="btn btn-default"><i class="fa fa-plus"></i>&nbsp;新增角色
                                    </button>
                                </div>
                            </div>
                            <table id="dataTable"
                                   class="table table-bordered table-condensed table-hover table-striped">
                                <tbody></tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!--END TEXT INPUT FIELD-->
    </div>
    <!-- /.col-lg-8 col-offset-2 -->
    <!--------------------------添加用户的弹出层---------------------------->
    <div id="add_modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
         data-backdrop="static"
         aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header bg-primary">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>


                    <h5 class="modal-title">
                        <i class="icon-pencil"></i>
                        <span data-type="add" style="font-weight:bold">添加角色</span>
                    </h5>
                </div>
                <form class="form-horizontal form-bordered form-row-strippe" id="add_form" action=""
                      data-toggle="validator" enctype="multipart/form-data">
                    <input type="hidden" name="id"/>
                    <div class="modal-body">
                        <div class="row">
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label class="control-label col-md-2">角色名称</label>
                                    <div class="col-md-10">
                                        <input name="text" type="text" class="form-control"
                                               placeholder="角色名称..."/>
                                    </div>
                                </div>

                            </div>
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label class="control-label col-md-2">描述</label>
                                    <div class="col-md-10">
                                        <input name="description" type="text" class="form-control"
                                               placeholder="描述..."/>
                                    </div>
                                </div>
                            </div>
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label class="control-label col-md-2">权限</label>
                                    <div class="col-md-10">
                                        <div id="menuContent" class="menuContent" style="width:50%;">
                                            <ul id="treeDemo" class="ztree"></ul>
                                        </div>
                                    </div>
                                </div>




                            </div>
                        </div>
                    </div>
                    <div class="modal-footer bg-info">
                        <input type="hidden" id="ID" name="ID"/>
                        <button type="button" id="add_role_button" class="btn blue">确定</button>
                        <button type="button" class="btn green" data-dismiss="modal">取消</button>
                    </div>
                    <div class="alert alert-danger error_div" style="text-align: center;display: none;">
                        <strong>错误!</strong><span></span>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <!-- /modal -->
    <!--------------------------添加用户的弹出层---------------------------->
    <div id="update_modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
         data-backdrop="static"
         aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header bg-primary">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>


                    <h5 class="modal-title">
                        <i class="icon-pencil"></i>
                        <span data-type="add" style="font-weight:bold">修改角色信息</span>
                    </h5>
                </div>
                <form class="form-horizontal form-bordered form-row-strippe" id="add_form" action=""
                      data-toggle="validator" enctype="multipart/form-data">
                    <input type="hidden" name="id"/>
                    <div class="modal-body">
                        <div class="row">
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label class="control-label col-md-2">角色名称</label>
                                    <div class="col-md-10">
                                        <input name="text" type="text" class="form-control"
                                               placeholder="角色名称..."/>
                                    </div>
                                </div>

                            </div>
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label class="control-label col-md-2">描述</label>
                                    <div class="col-md-10">
                                        <input name="description" type="text" class="form-control"
                                               placeholder="描述..."/>
                                    </div>
                                </div>
                            </div>
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label class="control-label col-md-2">权限</label>
                                    <div class="col-md-10">
                                        <div id="menuContent1" class="menuContent" style="width:50%;">
                                            <ul id="treeDemo1" class="ztree"></ul>
                                        </div>
                                    </div>
                                </div>
                                </div>
                            </div>
                    </div>
                    <div class="modal-footer bg-info">
                        <button type="button" id="update_role_button" class="btn blue">确定</button>
                        <button type="button" class="btn green" data-dismiss="modal">取消</button>
                    </div>
                    <div class="alert alert-danger error_div" style="text-align: center;display: none;">
                        <strong>错误!</strong><span></span>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <!-- /modal -->


</div>
<!--jQuery -->
<script src="/assets/lib/jquery/jquery.min.js"></script>
<!--Bootstrap -->
<script src="/assets/lib/bootstrap/js/bootstrap.min.js"></script>
<script src="/assets/lib/bootstrap-table/bootstrap-table.min.js"></script>
<script src="/assets/lib/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script src="/assets/lib/bootstrap-switch/js/bootstrap-switch.min.js"></script>
<script src="/assets/lib/select2/js/select2.min.js"></script>
<script src="/assets/lib/ztree/jquery.ztree.all.min.js"></script>
<script src="/assets/lib/bootstrap-validator/js/bootstrapValidator.min.js"></script>
<!-- MetisMenu -->
<script src="/assets/lib/metismenu/metisMenu.js"></script>
<!-- Metis core scripts -->
<script src="/assets/js/core.js"></script>
<!-- Metis demo scripts -->
<script src="/assets/js/app.js"></script>
<script src="/assets/lib/layer/layer.js"></script>
<script>
    var csrf_token = "${_csrf.token}";
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN':csrf_token
        }});
    var versionList = [];
    $(document).ready(function () {
        $('#add_modal').on('show.bs.modal', function (e) {
            $.ajax({
                type: "GET",
                dataType: "json",
                url: "/sys/get/roles",
                beforeSend: function () {
                },
                success: function (res) {
                    if (res.status) {
                        layer.msg("获取角色失败", {icon: 7});
                    } else {
                        $(e.target).find(".role_select").select2({
                            width: "100%",
                            tags: true,
                            maximumSelectionLength: 3,
                            data: res,
                            placeholder: "请选择角色"
                        });

                    }
                },
                error: function (xhr, errorType, error) {
                    layer.msg("获取角色失败", {icon: 7});
                },
                complete: function () {
                }
            });
        });
        $('#add_modal,#update_modal').on('hide.bs.modal', function () {
            $(this).find(".error_div").hide();
        });
        initTable();

        $(document).on("click", "#update_button", function (e) {
            $.ajax({
                type: "POST",
                dataType: "json",
                url: "/sys/update/version",
                data: $(this).closest("form").serialize(),
                success: function (res) {
                    if (res.status != "y") {
                        layer.msg(res.info, {icon: 7});

                    } else {
                        layer.msg("修改成功", {icon: 6});
                        $("table").bootstrapTable('refresh');
                    }
                },
                error: function (xhr, errorType, error) {
                    layer.msg("操作失败", {icon: 7});
                },
                complete: function () {
                    $("#update_modal").modal("hide");
                }
            });
        });

        $(document).on("click", "#add_role_button", function (e) {
            var $form=$(e.target).closest("form")
            var arr=$form.serializeArray();
            arr.push({name:"permissionIds",value:GetCheckedAll()});
            console.log(arr);
            $.ajax({
                type: "POST",
                dataType: "json",
                url: "/sys/add/role",
                data:arr,
                beforeSend: function () {
                },
                success: function (res) {
                    if (res.status==null||res.status!="y") {
                        showError($form,res.info);
                    } else {
                        layer.msg("添加角色成功", {icon: 7});
                        $("#add_modal").modal("hide");
                        $('table').bootstrapTable('refresh');
                    }
                },
                error: function (xhr, errorType, error) {
                    showError($form,error);
                },
                complete: function () {

                }
            });


        });

        $(document).on("click", "#update_role_button", function (e) {
            var $form=$(e.target).closest("form")
            var arr=$form.serializeArray();
            arr.push({name:"permissionIds",value:GetCheckedAll("treeDemo1")});
            console.log(arr);
            $.ajax({
                type: "POST",
                dataType: "json",
                url: "/sys/update/role",
                data:arr,
                beforeSend: function () {
                },
                success: function (res) {
                    if (res.status==null||res.status!="y") {
                        showError($form,res.info);
                    } else {
                        layer.msg("修改角色成功", {icon: 7});
                        $("#update_modal").modal("hide");
                        $('table').bootstrapTable('refresh');
                    }
                },
                error: function (xhr, errorType, error) {
                    showError($form,error);
                },
                complete: function () {

                }
            });


        });
        $(document).on("click", ".role-edit", function (e) {
            var roleId = $(e.target).closest("tr").find("td:first").find("span").attr("data-id");
            $.ajax({
                type: "GET",
                dataType: "json",
                url: "/sys/get/menu_permission/selected",
                data:{roleId:roleId},
                beforeSend: function () {
                },
                success: function (res) {
                    if(roleList&&roleList.length>0){
                        var obj;
                        roleList.map(function (p1, p2, p3) {
                            if(p1.id==roleId){
                                obj=p1;
                                return;
                            }
                        });
                        if(obj){
                            var $form = $("#update_modal").find("form");

                            $form.find("input").each(function () {
                                var name = $(this).attr("name");
                                switch (name) {
                                    case "id":
                                        $(this).val(obj.id);
                                        break;
                                    case "description":
                                        $(this).val(obj.description);
                                        break;
                                    case "text":
                                        $(this).val(obj.text);
                                        break;
                                }
                            });
                            var selectData = res;
                            $.fn.zTree.init($("#treeDemo1"), setting, treeData);
                            onCheck(selectData);
                            var treeObj = $.fn.zTree.getZTreeObj("treeDemo1");
                            treeObj.expandAll(true);
                            $("#update_modal").modal("show");
                        }

                    }

                },
                error: function (xhr, errorType, error) {
                    layer.msg("获取角色失败", {icon: 7});
                },
                complete: function () {
                }
            });

        });
        $(document).on("click", ".role-del", function (event) {
            var roleId = $(event.target).closest("tr").find("td:first").find("span").attr("data-id");
            layer.confirm('是否删除该角色？', function () {
                $.ajax({
                    type: "POST",
                    dataType: "json",
                    url: "/sys/del/role",
                    data: {
                        roleId:roleId
                    },
                    success: function (res) {
                        console.log(res);
                        if (res==null||res.status != "y") {
                            layer.msg("操作失败", {icon: 7});
                        } else {
                            $("table").bootstrapTable('refresh');
                            layer.msg("删除成功", {icon: 6});
                        }
                    },
                    error: function (xhr, errorType, error) {
                        layer.msg("操作失败", {icon: 7});
                    }
                });
            });
        });
        initTree();

    });
    var treeData=[];
    var roleList=[];
    var setting = {
        data: {//表示tree的数据格式
            simpleData: {
                enable: true,//表示使用简单数据模式
                idKey: "id",//设置之后id为在简单数据模式中的父子节点关联的桥梁
                pidKey: "pId",//设置之后pid为在简单数据模式中的父子节点关联的桥梁和id互相对应
                rootId: "null"//pid为null的表示根节点
            }
        },
        view: {//表示tree的显示状态
            selectMulti: false//表示禁止多选
        },
        check: {//表示tree的节点在点击时的相关设置
            enable: true,//是否显示radio/checkbox
            chkStyle: "checkbox",//值为checkbox或者radio表示
            checkboxType: {p: "", s: ""},//表示父子节点的联动效果
            radioType: "level"//设置tree的分组
        },
        callback:{//表示tree的一些事件处理函数
        }
    };
    function showError(obj,error){
        obj.find(".error_div").find("span").text(error);
        obj.find(".error_div").show();
    }
    function initTree() {
        $.ajax({
            type: "GET",
            dataType: "json",
            url: "/sys/get/menu_permission",
            beforeSend: function () {
            },
            success: function (res) {
                if (res.status) {
                    layer.msg("获取权限失败", {icon: 7});
                } else {
                    treeData = res;
                    treeData.push({id: "0", name: "全部", pId: null})
                    $.fn.zTree.init($("#treeDemo"), setting, treeData);

                }
            },
            error: function (xhr, errorType, error) {
                layer.msg("获取角色失败", {icon: 7});
            },
            complete: function () {
            }
        });

    }
    function showError(obj, error) {
        obj.find(".error_div").find("span").text(error);
        obj.find(".error_div").show();
    }
    function initTable() {
        var url = "/sys/get/roles";
        $('table').bootstrapTable({
            toolbar:"#toolbar",
            method: 'GET',
            dataType: 'json',
            contentType: "application/x-www-form-urlencoded",
            cache: false,
            striped: true,                              //是否显示行间隔色
            sidePagination: "client",           //分页方式：client客户端分页，server服务端分页（*）
            url: url,
            sortable: true,
            showColumns: false,
            search:true,
            pagination: true,
            minimumCountColumns: 2,
            pageNumber: 1,                       //初始化加载第一页，默认第一页
            pageSize: 10,                       //每页的记录行数（*）
            pageList: [10, 25, 50, 100],        //可供选择的每页的行数（*）
            uniqueId: "id",                     //每一行的唯一标识，一般为主键列
            showExport: true,
            exportDataType: 'all',
            columns: [
                {
                    field: 'id',
                    title: '序列号',
                    formatter: function (value, row, index) {
                        return "<span data-id='" + value + "'>" +  (index +1) + "</span>";
                    }
                },
                {
                    field: 'text',
                    title: '角色名称',
                    align: 'center',
                    valign: 'middle'
                }, {
                    field: 'description',
                    title: '描述',
                    align: 'center',
                    valign: 'middle'
                }, {
                    field: 'createTime',
                    title: '创建时间',
                    align: 'center',
                    valign: 'middle',
                    formatter: function (value, row, index) {
                        return new Date(value).format('yyyy-MM-dd hh:mm:ss');
                    }
                },
                {
                    field: 'modifyTime',
                    title: '修改时间',
                    align: 'center',
                    valign: 'middle',
                    formatter: function (value, row, index) {
                        if(value)
                        return new Date(value).format('yyyy-MM-dd hh:mm:ss');
                    }
                }
                , {
                    field: 'enabled',
                    title: '状态',
                    align: 'center',
                    valign: 'middle',
                    formatter: function (value, row, index) {
                        if (value == true)
                            return "<input class='make-switch' type='checkbox' data-size='mini' data-on-color='warning' data-off-color='danger' checked />";
                        else return "<input class='make-switch' type='checkbox' data-size='mini' data-on-color='warning' data-off-color='danger'/>";
                    }
                },
                {
                    field: '',
                    title: '操作',
                    align: 'center',
                    valign: 'middle',
                    formatter: function (value, row, index) {
                        var strHtml ='<a title="编辑"  href="javascript:void(0);" class="btn btn-xs btn-info role-edit" ><i class="fa fa-edit bigger-120"></i></a>';

                       if(row.code!="role_agent"){
                           strHtml  +='&nbsp;<a href="javascript:;" title="删除" class="btn btn-xs btn-success role-del"><i class="fa fa-close  bigger-120"></i></a>';
                       }
                        return strHtml;
                    }
                }
            ],
            onLoadSuccess: function (data) {  //加载成功时执行
                roleList = data;
            },
            onPostBody: function () {
                $(".make-switch").bootstrapSwitch({
                    onSwitchChange: function (event, state) {
                        var roleId = $(event.target).closest("tr").find("td:first").find("span").attr("data-id");
                        $.ajax({
                            type: "POST",
                            dataType: "json",
                            url: "/sys/enable/role",
                            data: {
                                roleId: roleId,
                                enabled: state
                            },
                            beforeSend: function () {
                            },
                            success: function (res) {
                                if (res.status != "y") {
                                    layer.msg("操作失败", {icon: 7});
                                    $("table").bootstrapSwitch('state', !state, true);
                                }
                            },
                            error: function (xhr, errorType, error) {
                                layer.msg("操作失败", {icon: 7});
                                $(event.target).bootstrapSwitch('state', !state, true);
                            },
                            complete: function () {
                            }
                        });
                    }
                });
            }
        });

    }

    $.fn.modal.Constructor.prototype.enforceFocus = function () {
    };
    Date.prototype.format = function (fmt) { //author: meizz
        var o = {
            "M+": this.getMonth() + 1, //月份
            "d+": this.getDate(), //日
            "h+": this.getHours(), //小时
            "m+": this.getMinutes(), //分
            "s+": this.getSeconds(), //秒
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度
            "S": this.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
    }

    //获取所有选中节点的值
    function GetCheckedAll(obj) {
        var arr=[];
        var treeObj = $.fn.zTree.getZTreeObj(obj?obj:"treeDemo");
        var nodes = treeObj.getCheckedNodes(true);
        for (var i = 0; i < nodes.length; i++) {
            arr.push(nodes[i].id);
        }
        return arr;
    }

    //全选
    function CheckAllNodes() {
        var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
        treeObj.checkAllNodes(true);
    }

    //全取消
    function CancelAllNodes() {
        var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
        treeObj.checkAllNodes(false);
    }
    /*******初始化选中的节点********/
    function onCheck(result){
        if(result.length>0){
            var treeObj = $.fn.zTree.getZTreeObj("treeDemo1");
            var nodes=treeObj.getNodes();
            var nodes1 = treeObj.transformToArray(nodes);
            nodes1.map(function (p1, p2, p3) {
                var checkedId;
                var flag=false;
                for(var j=0;j<result.length;j++){
                    checkedId=result[j].id;
                    if(checkedId==p1.id){
                        flag=true;
                        break;
                    }
                }
                if(flag){
                    treeObj.checkNode(treeObj.getNodeByParam("id", p1.id, null), true, true);
                }else {
                    treeObj.checkNode(treeObj.getNodeByParam("id", p1.id, null), false, true);
                }
            });

        }
    }
</script>
</body>

</html>
